package org.cyz.tools.core.assembly.tableview;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.control.TableColumn;
import javafx.scene.control.cell.PropertyValueFactory;

import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @author abccy
 * @title: TableView
 * @projectName RedisGUI
 * @description: table-view 组件的封装
 * @date 2020-8-2423:43
 */
public class TableView {
    private static ObservableList<NodeInfo> _list = FXCollections.observableArrayList();
    private static javafx.scene.control.TableView tableView = new javafx.scene.control.TableView();

    private static TableColumn cIndex = new TableColumn("列");
    private static TableColumn cKey = new TableColumn("键");
    private static TableColumn cValue = new TableColumn("值");

    public TableView() {
    }

    static {
        tableView.setEditable(true);
        //设置自动拉满
        tableView.setColumnResizePolicy(javafx.scene.control.TableView.CONSTRAINED_RESIZE_POLICY);
        tableView.setPrefSize(550.0, 303.0);
        cIndex.setCellValueFactory(new PropertyValueFactory<>("index"));
        cKey.setCellValueFactory(new PropertyValueFactory<>("key"));
        cValue.setCellValueFactory(new PropertyValueFactory<>("value"));

        tableView.getColumns().add(0, cIndex);
        tableView.getColumns().add(1, cKey);
        tableView.getColumns().add(2, cValue);

    }

    /**
     * 解析map集合
     *
     * @param maps
     * @return
     */
    public synchronized static javafx.scene.control.TableView parseMap(Map<String, String> maps) {
        clean();
        int _i = 0;
        Iterator<Map.Entry<String, String>> iterable = maps.entrySet().iterator();
        while (iterable.hasNext()) {
            ++_i;
            Map.Entry<String, String> entry = iterable.next();
            _list.add(new NodeInfo(_i, entry.getKey(), entry.getValue()));
        }
        tableView.setItems(_list); //tableview添加list
        return tableView;
    }


    /**
     * 解析set集合
     *
     * @param sets
     * @return
     */
    public synchronized static javafx.scene.control.TableView parseSet(Set<String> sets) {
        clean();
        int _i = 0;
        Iterator<String> iterable = sets.iterator();
        while (iterable.hasNext()) {
            ++_i;
            String entry = iterable.next();
            _list.add(new NodeInfo(_i, entry.substring(0, entry.lastIndexOf(":")), entry.substring(entry.lastIndexOf(":")+1,entry.length())));
        }
        tableView.setItems(_list); //tableview添加list
        return tableView;
    }

    /**
     * 解析list集合
     *
     * @param list
     * @return
     */
    public synchronized static javafx.scene.control.TableView parseList(List<String> list) {
        clean();
        for (int i = 0; i < list.size(); i++) {
            _list.add(new NodeInfo(i, "", list.get(i)));
        }
        tableView.setItems(_list); //tableview添加list
        return tableView;
    }

    private static void clean(){
        _list.clear();
    }

}
